package co.yixiang.modules.security.security;

import org.springframework.security.config.annotation.SecurityConfigurerAdapter;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.DefaultSecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;

/**
 * TokenConfigurer类用于配置自定义的Token过滤器。
 * 它继承自SecurityConfigurerAdapter，专门用于在Spring Security中添加过滤器。
 *
 * @author /
 */
public class TokenConfigurer extends SecurityConfigurerAdapter<DefaultSecurityFilterChain, HttpSecurity> {

    /**
     * tokenUtil用于Token的生成和验证等操作。
     */
    private final TokenUtil tokenUtil;

    /**
     * 构造函数，初始化TokenConfigurer。
     *
     * @param tokenUtil Token工具类实例，用于Token的生成和验证。
     */
    public TokenConfigurer(TokenUtil tokenUtil){
        this.tokenUtil = tokenUtil;
    }

    /**
     * 配置方法，用于在Spring Security的过滤器链中添加自定义的Token过滤器。
     *
     * @param http HttpSecurity对象，用于配置Web安全。
     * @throws Exception 配置过程中可能抛出的异常。
     */
    @Override
    public void configure(HttpSecurity http) {
        // 创建自定义的Token过滤器实例。
        TokenFilter customFilter = new TokenFilter(tokenUtil);
        // 在UsernamePasswordAuthenticationFilter之前添加自定义的Token过滤器。
        http.addFilterBefore(customFilter, UsernamePasswordAuthenticationFilter.class);
    }
}
